package com.xu.gtenerator.mybatis;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.List;

/**
 * mybatis代码生成器
 *
 * @Author: 许乾伟
 * @Date: 2024/2/27 11:48
 */
public class GeneratorApp {
    private static GeneratorInfo generatorInfo;

    /**
     * 初始化生成配置
     */
    private static void init() {
        generatorInfo = GeneratorInfo.builder()
                .outputDir("E:/DATA/")
                .author("许乾伟")
                .dbUrl("jdbc:mysql://localhost:3306/template_db")
                .dbUser("root")
                .dbPwd("123456")
                .tables(List.of("sys_work_time_config","sys_work_time_config_detail"))
//                .tables(List.of())
                .parent("com.xu.system")
                .build();

    }
    /**
     * 生成器启动
     * @param args
     */
    public static void main(String[] args) {
        init();
        FastAutoGenerator.create(generatorInfo.getDbUrl(), generatorInfo.getDbUser(), generatorInfo.getDbPwd())
                .globalConfig(builder -> {
                    builder.author(generatorInfo.getAuthor())
                            .outputDir(generatorInfo.getOutputDir())
                            .commentDate("yyyy-MM-dd hh:mm:ss");
                })
                .packageConfig(builder -> {
                    builder.parent(generatorInfo.getParent())
                            .entity("model.entity")
                            .service("service.db")
                            .serviceImpl("service.db.impl")
                            .mapper("mapper")
                            .xml("resources/mapper");
                })
                .strategyConfig(builder -> {
                    builder.addInclude(generatorInfo.getTables())
                            //实体策略
                            .entityBuilder()
                            //禁用生成 serialVersionUID
                            .disableSerialVersionUID()
                            //开启覆盖已生成文件
                            .enableFileOverride()
                            //开启 lombok 模型
                            .enableLombok()
                            //开启生成实体时生成字段注解
                            .enableTableFieldAnnotation()
                            //开启生成字段常量
                            .enableColumnConstant()
                            //开启链式模型
                            .enableChainModel()
                            //开启生成mapper
                            .mapperBuilder()
                            //开启覆盖已生成文件
                            .enableFileOverride()
                            //启用 BaseResultMap 生成
                            .enableBaseResultMap()
                            //设置父类
                            .superClass(BaseMapper.class)
                            //开启 @Mapper 注解
//                            .mapperAnnotation(Mapper.class)
                            //格式化 mapper 文件名称
                            .formatMapperFileName("%sMapper")
                            //格式化 xml 实现类文件名称
                            .formatXmlFileName("%sMapper")
                            //开启生成service及impl
                            .serviceBuilder()
                            //开启覆盖已生成文件
                            .enableFileOverride()
                            //格式化 service 接口文件名称
                            .formatServiceFileName("I%sService")
                            //格式化 service 实现类文件名称
                            .formatServiceImplFileName("%sServiceImpl");
                })
                // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .templateEngine(new VelocityTemplateEngine())
                //关闭生成controller
                .templateConfig(builder -> builder.controller(""))
                .execute();

    }
}
